package com.vegetable.modules.service.stock;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vegetable.modules.entity.stock.CostWeightChangeSource;
import com.vegetable.modules.entity.stock.to.CostWeightChangeQueryTO;
import com.vegetable.modules.vo.CostWeightChangeGroupVO;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 成本单价变化查询服务类
 * </p>
 *
 * @author wangruijie
 * @since 2024-03-21
 */
public interface ICostWeightChangeQueryService extends IService<CostWeightChangeSource> {

    /**
     * 分页查询成本单价变化记录
     * @param queryTO 查询条件
     * @return 分页结果
     */
    IPage<CostWeightChangeSource> queryCostWeightChanges(CostWeightChangeQueryTO queryTO);
    
    /**
     * 分组分页查询成本单价变化记录
     * @param queryTO 查询条件
     * @return 分组分页结果
     */
    IPage<CostWeightChangeGroupVO> queryCostWeightChangesGrouped(CostWeightChangeQueryTO queryTO);
    
    /**
     * 根据源头订单ID查询连锁变化链路
     * @param sourceOrderId 源头订单ID
     * @return 连锁变化链路列表
     */
    List<CostWeightChangeSource> queryChainChangesBySourceOrder(Long sourceOrderId);
    
    /**
     * 根据库存ID查询所有相关变化（包括直接变化和连锁变化）
     * @param stockId 库存ID
     * @return 相关变化列表
     */
    List<CostWeightChangeSource> queryRelatedChangesByStockId(Long stockId);
    
    /**
     * 查询显著成本变化记录
     * @param threshold 阈值
     * @return 显著成本变化记录列表
     */
    List<CostWeightChangeSource> querySignificantChanges(BigDecimal threshold);
}